package com.example.word.common;

import com.deepoove.poi.XWPFTemplate;
import org.springframework.core.io.ClassPathResource;
import org.springframework.util.ClassUtils;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.util.Date;
import java.util.Map;
import java.util.Properties;

/**
 * word工具类
 * Poi-tl模板引擎官方文档：http://deepoove.com/poi-tl/
 */
public class WordUtil {

    /**
     * 根据模板填充内容生成word，并下载
     * @param templatePath word模板文件路径
     * @param paramMap     替换的参数集合
     */
    public static void downloadWord(OutputStream out, InputStream templatePath, Map<String, Object> paramMap) {
        
        Long time = new Date().getTime();
        // 生成的word格式
        String formatSuffix = ".docx";
        // 拼接后的文件名
        String fileName = "采样任务安排单"+ formatSuffix;
		
		//设置生成的文件存放路径，可以存放在你想要指定的路径里面
//		String rootPath="D:/mimi/"+File.separator+"file/word/";
        String rootPath="C:/springUpload/"; ;//生成临时文件存放地址

		String filePath = rootPath+fileName;
		File newFile = new File(filePath);
		//判断目标文件所在目录是否存在
		if(!newFile.getParentFile().exists()){
			//如果目标文件所在的目录不存在，则创建父目录
			newFile.getParentFile().mkdirs();
		}
    			
        // 读取模板templatePath并将paramMap的内容填充进模板，即编辑模板(compile)+渲染数据(render)
        XWPFTemplate template = XWPFTemplate.compile(templatePath).render(paramMap);
        try {
        	//out = new FileOutputStream(filePath);//输出路径(下载到指定路径)
            // 将填充之后的模板写入filePath
            template.write(out);//将template写到OutputStream中
        	out.flush();
        	out.close();
        	template.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    public static void main(String[] args) throws IOException {
///spring boot
        String springbooPath1 = ClassUtils.getDefaultClassLoader().getResource("").getPath();
        System.out.println("springbooPath1:"+springbooPath1);
///        String springbooPath2 = ResourceUtils.getURL("classpath:").getPath();
//        System.out.println("springbooPath2:"+springbooPath2);
//        不能这样写
//
// String springbooPath3 = ClassUtils.getDefaultClassLoader().getResource("/").getPath();
//                环境变量中的属性
//
        Properties properties = System.getProperties();
//        包所在的路径
//jar
        String dir = properties.getProperty("user.dir");
        System.out.println("dir:"+dir);
        String realPath = properties.getProperty("realPath");
        System.out.println("realPath:"+realPath);
        String jarWholePath = properties.getProperty("jarWholePath");
        System.out.println("jarWholePath:"+jarWholePath);
//        String protectionDomain = MonitorController.class.getProtectionDomain().getCodeSource().getLocation().getFile();
//        System.out.println("protectionDomain:"+protectionDomain);
//        获取⽅式获取当前类⽂件所在路径
//class
//        String classPath =this.getClass().getResource("").getPath();
//        System.out.println("classPath:"+classPath);
//        获取⽅式获取当前类路径
//class
//        String classPath2 =this.getClass().getResource("/").getPath();
//        System.out.println("classPath2:"+classPath2);
//        通过类加载器获取
//                包的绝对路径
//
//        jar

//        String classLoaderPath = MonitorController.class.getClassLoader().getResource("").getPath();
//        System.out.println("classLoaderPath:"+classLoaderPath);
//        不能这样写
//
//        String classLoaderPath2 = MonitorController.class.getClassLoader().getResource("/").getFile();
        URL contextClassPath1 = Thread.currentThread().getContextClassLoader().getResource("");
        System.out.println("contextClassPath1:"+contextClassPath1.getPath());
//        不能这样写
//
//        URL contextClassPath2 = Thread.currentThread().getContextClassLoader().getResource("
//word模板地址获取方式一：缺点---打jar包获取不到该路径
//        String basePath=ClassUtils.getDefaultClassLoader().getResource("").getPath()+"static/template/";
//        String resource =basePath+"order11.docx";//word模板地址



//word模板地址获取方式二：优点---相比上一种方式，这种方法不会在linux或者jar上失效
        ClassPathResource classPathResource = new ClassPathResource("static/template/order11.docx");
        String resource = classPathResource.getURL().getPath();
        System.out.println(resource);

    }
}
